<?php
/**
 *	Dado un login y una funcion, devuelve sobre que grupos puede ejecutarla
 *	Entrada:
 *	 - login
 *	 - funcion
 * 	Salida
 *	 - grupos => hash que tiene como llave el nombre de los grupos
 **/
private function __getGruposFuncion($login = "", $funcion = ""){
	try{
	
		$idUsuario 	= $this->__getIdUsuario($login);
		
		$res 		= $this->__getFuncion($funcion);
		$funcion 	= $res->funcion;
		
		if($funcion->valida_grupo != 'S'){
			$consulta = " SELECT nombre,descripcion FROM grupo ";
			$res 	  = $this->basedatos->ExecuteQuery($consulta, array());
			foreach( $res as $k => $v){
				$salida[]["nombre"] 	 = $v->nombre;
				$salida[]["descripcion"] = $v->descripcion;
			}
			
			return	$salida;
		}
		else{
			$marcados = array();
			$consulta =	' SELECT u.grupo hijo,g.nombre,g.descripcion 	'.
						' FROM usr_grupo u,funcionalidad f,grupo g 		'.
						' WHERE u.grupo=f.grupo 						'.
						'		AND g.id=u.grupo 						'.
						'		AND usuario = ?							'.
						'		AND funcion = ?							';
			$res 	  = $this->basedatos->ExecuteQuery($consulta, array($idUsuario, $funcion->id));
			
			$cons_grupos =  ' SELECT j.hijo,g.nombre, g.descripcion '.
							'	FROM jerarquia j,grupo g 			'.
							'	WHERE g.id = j.hijo 				'.
							'		  AND padre in (-1				';
			$seguir  = 1;
			$primera = 1;
			while($seguir){
				$seguir  = 0;
				$in		 = "";
				$valores = array();
				foreach($res as $k => $v){
					if(!isset($marcados[$v->hijo])){
						$in .= ",?";
						$valores[] = $v->hijo;
						if(!$primera){
							$marcados[$v->hijo] 		= 1;
							$salida[]["nombre"] 		= $v->nombre,
							$salida[]["descripcion"]	= $v->descripcion;
						}
						$seguir=1;
					}
				}
				if($seguir){
					$res 	  = $this->basedatos->ExecuteQuery($cons_grupos.$in.")", $valores);			
				}
				$primera = 0;
			}

			return	$salida;
		}
	}
	catch(Exception $e){
		throw new Exception( $e->getMessage( ) , (int)$e->getCode( ) );
	}
}